home *** CD-ROM | disk | FTP | other *** search
/ Micromanía 93 / CDMM_93_2.ISO / Project Nomads / nomads_demo_eng.exe / COMMANDS.TCL < prev    next >
Encoding:
Text File  |  2002-07-18  |  71.7 KB  |  2,170 lines

  1. #--------------------------------------------------------------------
  2. #
  3. #   /nomads/scripts/commands.tcl
  4. #
  5. #   NOMADS DEMO KOMMANDOS
  6. #
  7. #   Wird vom Standard-Demo ben÷tigt und implementiert wichtige 
  8. #   vom Demo ben÷tigte Routinen, wie NEWV, etc., die jedoch
  9. #   nicht von den Standard-Viewern ben÷tigt werden.
  10. #
  11. #   created:    09-Apr-99
  12. #   upd.:       08-Jun-99
  13. #               16-Jun-99   floh    neues Kommando 'sessions', Anpassungen an neue Welt:
  14. #               18-Jun-99   bernd   bugfixes
  15. #               19-Jun-99
  16. #               21-Jun-99   floh    + "<error>" ersetzt durch "null"
  17. #               05-Jul-99
  18. #               24-Aug-99   bernd   AufgerΣumt (ⁿberflⁿssige Routinen raus) watch_next / watch_prev jetzt auch mit "feindlichen" Fahrzeugen
  19. #               15-Sep-99   bernd   Demo Wegpunktlisten auf neues Format geΣndert, WegPunktRekorder
  20. #               16-Sep-99   bernd   KILL ME jezze per releasevehicle
  21. #               29-Sep-99   bernd   Steinhagel neu
  22. #               21-Okt-99   bernd   Neue Teststation
  23. #               25-Okt-99   bernd   bugfix: Viewer Watch/Follow auf neuesten Stand gebracht
  24. #               26-Okt-99   bernd   bugfix: handkontrolle funktioniert auch im Watch Mode wieder korrekt
  25. #               11-Nov-99   bernd   GAGA ! Artefakte     
  26. #               25-Nov-99   bernd   Neue Visualizer eingebaut                   
  27. #               26-Nov-99   bernd   Neue Routinen fⁿrs neue InputMapping: jumptovehicle, leavevehicle, clanof    
  28. #               30-Nov-99   bernd   Weiter am neuen InputMapping: control_current
  29. #               02-Dec-99   bernd   Weiter am neuen Input Mapping:Exception Handling fⁿr Explosionen
  30. #               09-Dec-99   bernd   fx_appear / Bugfixing und Details in leavevehicle und jumptovehicle
  31. #               13-Dec-99   bernd   neue Station -> Landschaftsrenderer.
  32. #               17-Dec-99   bernd   fx routine verbessert
  33. #               20-Dec-99   floh    neue Record-Input-Routinen: start_recording, stop_recording,
  34. #                                   start_playing
  35. #         ------- Millenium --------
  36. #               03-Jan-2000   bernd Screenshot
  37. #               08-Jan-2000   bernd jumptovehicle aufgebohrt - hei▀t jetzt ACTION
  38. #                                   watchvehicle Routine
  39. #               13-jan-2000   bernd Die Hilfe Routine vorbereitet. Bugfix beim Aufrufen von
  40. #               14-jan-2000         Leaveehicle / noch mehr Hilfe
  41. #               20-Jan-2000   bernd Die globale Variable me gekillt, weil das nicht ⁿber das Netz funktioniert hat,
  42. #                                   und  durch Clan-Funktionen ersetzt.
  43. #                                   watch_next und watch_prev eleminiert
  44. #                                   - watch_own verΣndert nicht mehr das aktuelle SEL
  45. #               24-Jan-2000   bernd SHOW_LOADSCREEN / REMOVE_LOADSCREEN
  46. #               27-Jan-2000   bernd ESCAPE
  47. #               28-Jan-2000   bernd ADDARTEFACT / REMARTEFACT
  48. #               29-Jan-2000   bernd Springen zu Bauwerken
  49. #               31-Jan-2000   bernd FINAL TWEAKING
  50. #         ----------------------------------------------------------------------------publdemo1
  51. #               01-Feb-2000   bernd Handkontrolle konnte nach dem 2. Jump in vhcl nicht korrekt ⁿbernommen werden
  52. #               02-Feb-2000   bernd FAST / SLOW wieder eingebaut einige Netzwerk unsichere Funktionen gesichert-
  53. #               03-Feb-2000   bernd mehr Sicherheitsabfragen
  54. #                                   unbenutze Funktionen gekillt getnext/prevclan xfollow xwatch
  55. #               04-Feb-2000   bernd SCHATTENJOHNS haben noch auf anderen Rechnern das Artefakt Menⁿ an und ausgeschaltet
  56. #               14-Mrz-2000   bernd daytime Anzeige
  57. #               15-Mrz-2000   bernd alignvehicle vereinfacht vieles
  58. #               20-Mrz-2000   bernd placecontainer wieder reingenommen
  59. #               28-Mrz-2000   bernd get_num_elements / get_index
  60. #               12-Apr-2000   bernd Energie Balken
  61. #               26-Apr-2000   af    allinone-Tcl Ubergangsweise fuer tests
  62. #               01-Mai-2000   af    allinone-Tcl nun separat clist_lib und statewatch-
  63. #                                   Scripts
  64. #               21-Jun-2000   bernd johnfall + johnfallstop
  65. #               25-Jun-2000   bernd SPELL
  66. #               28-Jun-2000   bernd WATCH FINETUNE
  67. #               10-Jun-2000   bernd DER MONTAG NACH DER LOVEPARDE : Beamen kostet
  68. #-------------------------------------------------------------------------------------PUBLDEMO2
  69. #               25-Jul-2000   bernd Sicherheitsabfrage bei Johnfallstop
  70. #               09-Aug-2000   floh  johnfall und johnfallstop vereinfacht, so dass
  71. #                                   nicht mehr an der Engine rumgefummelt wird, sondern
  72. #                                   am Maennel-Object selbst
  73. #               21-Aug-2000   bernd neuer Visualisierungsmode fⁿr Collissions-Objekte
  74. #               29-Aug-2000   bernd Current Quickspell wird jetzt angezeigt
  75. #               18-Oct-2000   bernd Der HomeButton wurde eingefⁿhrt.
  76. #               20-Oct-2000   bernd infotext
  77. #               26-Oct-2000   bernd infotext wird zu basaltface
  78. #               09-Nov-2000   jeremy +source of commands_leveldesign.tcl
  79. #               28-Nov-2000   floh  alte nmatnode/nvbufnode Sachen ersetzt
  80. #               24-Sep-2001   floh  reload Befehl fuer data.n Eintraege
  81. #               31-Oct-2001   bernd updatemaennelvalue / AufgerΣumt und alten Krempel gel÷scht
  82. #               07-Jan-2002   floh  "usersymbolicname" Funktion, welche einem Objekt, so es
  83. #                                   dem Player gehoert, den angegebenen Symbolicname gibt.
  84. #               25-Jan-02   floh    debug proc: fillboostercharges
  85. #               18-Feb-02   floh    debug proc: switch between chase and free viewer
  86. #               19-Feb-02   floh    gameend_singleplayer proc which is called when the
  87. #                                   lighthouse dies
  88. #               11-Apr-02   basti   SelChapter und SoundEditor Script eingefⁿgt
  89. #               11-Jun-02   basti   1. check, damit tcl-lib nicht 2x geladen wird
  90. #               04-Jul-02   floh    leavevehicle beachtet fastpossess Flag an Welt
  91. #           
  92. #   (C) 1999-2000 Bernd Beyreuther
  93. #   (C) COPYRIGHT 2000,2001 RADONLABS GMBH
  94. #
  95. #--------------------------------------------------------------------
  96.  
  97. source $nomads_home/scripts/commandlist_lib.tcl
  98. source $nomads_home/scripts/statewatch_scripts.tcl
  99.  
  100. # GLOBALE VARIABLEN und INITIALISIERUNGEN  --------------------------
  101. set     timebase            0
  102. set     vis                 0
  103. set     netstat             0
  104. set     wetter              0
  105. set     screenshotcounter   0
  106. set     hilfe               0
  107. set     feindclan           "null"
  108. set     uhr                 0
  109. set     tclload             1
  110.  
  111. # ------------------
  112. #
  113. #   DEBUG ROUTINE DIE DIE SKYBOX RICHTIG REIN SETZT
  114. #
  115. # ------------------
  116. proc skybox {} {
  117.     puts "*** SKYBOX IST OBSOLETE ***"
  118. }
  119.  
  120. #-------------------------------------------------------------------------------
  121. #   lighthouse_killed
  122. #
  123. #   Called by singleplayer lighthouse in explode state.
  124. #
  125. #   If current object is the player's lighthouse:
  126. #
  127. #   - connect viewer to island
  128. #   - kill the player's island
  129. #   - kills the maennel (this will also open the ingame_gameend menu
  130. #-------------------------------------------------------------------------------
  131. proc lighthouse_killed {} {
  132.  
  133.     # do this if single player only
  134.     if {[/world.isnetsession] == "false"} {
  135.     
  136.         set userClan [/world.getuserclan]
  137.         
  138.         if {$userClan != "null"} {
  139.  
  140.             if {[.getclan] == $userClan} {
  141.         
  142.                 set playerIsland [$userClan.getplayerisland]
  143.  
  144.                 # connect viewer to island
  145.                 /world.setviewercarrier $playerIsland
  146.  
  147.                 # kill maennel
  148.                 [$userClan.getmaennel].reduceenergy 1000000
  149.             }
  150.         }
  151.     }
  152.  
  153.     # kill the island
  154.     set island [.getparentvehicle]
  155.  
  156.     if {$island != "null"} {
  157.         $island.reduceenergy [expr ([$island.getmaxenergy] + 10)]
  158.     }
  159. }
  160.  
  161. #-------------------------------------------------------------------------------
  162. # crash the island, but don't kill the player
  163. #-------------------------------------------------------------------------------
  164. proc lighthouse_removed {} {
  165.  
  166.     # kill the island
  167.     set island [.getparentvehicle]
  168.  
  169.     if {$island != "null"} {
  170.         $island.reduceenergy [expr ([$island.getmaxenergy] + 10)]
  171.     }
  172. }
  173.  
  174. #-------------------------------------------------------------------------------
  175. #   fillboostercharges
  176. #   Sets the number of booster charges of maennel to 20
  177. #-------------------------------------------------------------------------------
  178. proc fillboostercharges {} {
  179.     set clan [/world.getuserclan]
  180.     set maennel [$clan.getmaennel]
  181.     
  182.     $maennel.setcanfly true
  183.     $maennel.setmaxboostcharges 20
  184.     $maennel.setboostcharges 20
  185. }
  186.  
  187. #-------------------------------------------------------------------------------
  188. #   switchviewers
  189. #   switch between chase and free viewer.
  190. #-------------------------------------------------------------------------------
  191. proc switchviewers {} {
  192.     set curViewer [/world.getviewer2]
  193.     if {$curViewer == "/world/viewers/chaseviewer"} {
  194.         /world.setviewer2 "/world/viewers/freeviewer"
  195.         /world.sethandcontrol "null"
  196.     } else {
  197.         /world.setviewer2 "/world/viewers/chaseviewer"
  198.         /world.sethandcontrol [[/world.getuserclan].getmaennel]
  199.     }
  200. }
  201.  
  202. #-------------------------------------------------------------------------------
  203. #   usersymbolicname [symname]
  204. #
  205. #   Testet, ob das aktuell selektierte Objekt dem Player gehoert, wenn ja wird 
  206. #   der per Arg definierte Symbolicname eingetragen. Diese Routine wird von den
  207. #   Statewatcher-Scripts aufgerufen (meistens bei Gebaeuden), um neuen Objekten
  208. #   nachdem sie der User gebaut hat, einen Standard-Symbolicname zu verpassen.
  209. #
  210. #   07-Jan-01   floh    created
  211. #-------------------------------------------------------------------------------
  212. proc usersymbolicname {symname} {
  213.     if {[.getclan] == [/world.getuserclan]} {
  214.         .setsymbolicname $symname
  215.     }
  216. }
  217.  
  218. # -----------------------------------------------------------------------------------
  219. #   VerΣndert Werte am Character
  220. #   Diese Routine wird von Spells aufgerufen, die Werte setzen.
  221. #   Wie z.B. Anzahl Slots hoch etc.
  222. #
  223. #   FIXME: Mir ist nicht ganz klar... ob in einigen FΣllen das alles
  224. #   korrekt abgespeichert wird. 
  225. #   z.B. setenergy / setmaxenergy...
  226. #
  227. #   04-Jul-02   floh    tsatsatsa wer hat denn diese Routine geschrieben? 
  228. #                       anstatt tausendmal [[/world.getuserclan].getmaennel] zu machen
  229. #                       kann man's doch wirklich bisser effizienter haben!
  230. # -----------------------------------------------------------------------------------
  231. proc updatemaennelvalue { name value } {
  232.     set maennel [[/world.getuserclan].getmaennel]
  233.  
  234.     switch $name {
  235.         maxartefacts { $maennel.setmaxartefacts [expr [$maennel.getmaxartefacts] + $value] }
  236.         distancetank { $maennel.setdistancetank [expr [$maennel.getdistancetank] + $value] }
  237.         energy       { $maennel.setenergy       [expr [$maennel.getenergy]       + $value] }
  238.         default      { puts "ERROR!!! scripts/commands.tcl: proc updatemaennelvalue unknown parameters !" }
  239.     }   
  240. }
  241.  
  242. #-------------------------------------------------------------------------------
  243. #   reload [data.n entry name]
  244. #
  245. #   Reload the given data.n entry from disc, useful for testing
  246. #   changes to the visual/audio prototype.
  247. #
  248. #   24-Sep-01   floh    created
  249. #-------------------------------------------------------------------------------
  250. proc reload {entry} {
  251.     global nomads_home
  252.  
  253.     if {[file exists $nomads_home/data.n/$entry]} {
  254.  
  255.         set nebcwd [psel]
  256.         set fscwd  [pwd]
  257.         sel /data
  258.  
  259.         # delete existing data.n entry
  260.         if {[exists $entry]} {
  261.             delete $entry
  262.         }
  263.  
  264.         # load new entry
  265.         cd $nomads_home/data.n
  266.         get $entry
  267.         
  268.         cd $fscwd
  269.         sel $nebcwd
  270.     } else {
  271.         puts "Could not find data.n entry $entry"
  272.     }
  273. }
  274.  
  275. # -----------------------------------------------------------------------------------
  276. #   DEBUG PROC  
  277. #   Gibt mir die Position des SpielerMΣnnels aus
  278. #   created:    Bernd
  279. # -----------------------------------------------------------------------------------
  280. proc wo {  } {
  281.     puts [[[/world.getuserclan].getmaennel].getposition]
  282. }
  283.  
  284. # -----------------------------------------------------------------------------------
  285. #   DEBUG PROC  
  286. #   Gibt mir die Position des SpielerMΣnnels relativ zum Parentvehicle aus
  287. #   created:    Andreas/Sylvius
  288. # -----------------------------------------------------------------------------------
  289. proc hier {  } {
  290.     set clan    [/world.getuserclan]
  291.     set maennel [$clan.getmaennel]
  292.     set mpos    [$maennel.getposition]
  293.     set p       [$maennel.getparentvehicle]
  294.     set ppos    [$p.getposition]
  295.     set dx      [expr [lindex $mpos 0] - [lindex $ppos 0]]
  296.     set dy      [expr [lindex $mpos 1] - [lindex $ppos 1]]
  297.     set dz      [expr [lindex $mpos 2] - [lindex $ppos 2]]
  298.     puts "$dx $dy $dz"
  299. }
  300.  
  301. # -----------------------------------------------------------------------------------
  302. #   DEBUG PROC
  303. #   Gibt mir eine schoene Grundaustattung an Artefakten
  304. #   created:    sylle
  305. #   modified:   bernd.d mehr artefakte, energyclots und hoehere versionen
  306. # -----------------------------------------------------------------------------------
  307. proc picnic {  } {
  308.     sel [[/world.getuserclan].getmaennel]
  309.     setmaxartefacts 9
  310.     news meta_navigationtower
  311.     news meta_guntower03
  312.     news meta_guntower03
  313.     news meta_powerplant03
  314.     news meta_scoutgarage
  315.     news meta_silo03
  316.     news ofen03
  317.     news biggun
  318.     news energyclotplus
  319.     news energyclotplus
  320.     news energyclotplus
  321.     news energyclotplus
  322.     news energyclotplus
  323.     news energyclotplus
  324.     news energyclotplus
  325.     news energyclotplus   
  326. }
  327.  
  328. # -----------------------------------------------------------------------------------
  329. #   DEBUG PROC
  330. #   WΣhlt das SpielermΣnnel als aktuelles NebulaDirectory an
  331. #   created:    Bernd
  332. # -----------------------------------------------------------------------------------
  333. proc icke {  } {
  334.     sel [[/world.getuserclan].getmaennel]
  335. }
  336.  
  337. # -----------------------------------------------------------------------------------
  338. #   DEBUG PROC 
  339. #   Gibt mir Massenhaft Energie zum Bauen
  340. # -----------------------------------------------------------------------------------
  341. proc clanenergy {} {
  342.     set clan [/world.getuserclan]
  343.     
  344.     set maximum [$clan.getcurrentmaximum]
  345.     $clan.setcurrentenergy $maximum
  346.  
  347.     # maennel bis zum maximum auffuellen
  348.     set maennel [$clan.getmaennel]
  349.     set maximum [$maennel.getmaxenergy]
  350.     $maennel.setenergy $maximum
  351. }
  352.  
  353. # -----------------------------------------------------------------------------------
  354. # Geht durch alle clans und fⁿhrt auf alle Objekte (container) einen Befehl aus
  355. # -----------------------------------------------------------------------------------
  356. proc onall { befehl arg1 arg2 arg3 } {
  357.     puts "*** onall IS OBSOLETE ***"
  358.  
  359. #    set cursel [psel]
  360. #    foreach clan   [ getallchilds /world/clans ] { 
  361. #        foreach objekt   [ getallchilds $clan ] {         
  362. #            sel $objekt
  363. #            $befehl $arg1 $arg2 $arg3
  364. #        }    
  365. #    }     
  366. #    sel $cursel
  367. }
  368.  
  369.  
  370. #-------------------------------------------------------------------------------
  371. #   Wird zur Zeit noch von den Input-Mapping-Routinen verwendet. Kann das raus?
  372. #   (floh 04-Jul-02)
  373. #-------------------------------------------------------------------------------
  374. proc johnfall {} {
  375.     if {[/world.getuserclan] != "null"} {
  376.         set me [[/world.getuserclan].getmaennel]
  377.         $me.setforcedfallflag true
  378.     }
  379. }
  380.  
  381. proc johnfallstop {} {
  382.     if {[/world.getuserclan] != "null"} {
  383.         set me [[/world.getuserclan].getmaennel]
  384.         $me.setforcedfallflag false
  385.     }
  386. }
  387.  
  388.  
  389. # -------------------------------------
  390. proc get_num_elements {} {
  391. puts "*** get_num_elements IS OBSOLETE ***"
  392.  
  393. #   set cur_dir [psel]
  394. #   sel ..
  395. #   set x [.gethead]
  396. #   set counter 0
  397. #   while {$x != "null"} {
  398. #       sel $x
  399. #       incr counter 1
  400. #       set x [.getsucc]
  401. #   }
  402. #   sel $cur_dir
  403. #   return $counter
  404. }
  405.  
  406.  
  407. # -------------------------------------
  408. proc get_index {} {
  409. puts "*** get_num_elements IS OBSOLETE ***"
  410.  
  411. #    set cur_dir [psel]
  412. #    sel ..
  413. #    set x [.gethead]
  414. #    set counter 0
  415. #    while { [.getfullname] != $cur_dir } {
  416. #        sel $x
  417. #        incr counter 1
  418. #        set x [.getsucc]
  419. #    }
  420. #    sel $cur_dir
  421. # return $counter
  422. }
  423.  
  424. # -------------------------------------------------------------------------
  425. #   DAS IST EINE DEBUG ROUTINE, DIE IN DER DISTRIBUTIONS VERSION VON NOMADS
  426. #   NICHT AUFGERUFEN WERDEN KANN, WEIL DAS GANZE TK ZEUX NICHT MITGELIEFERT 
  427. #   WIRD !
  428. # -------------------------------------------------------------------------
  429. proc p {} {
  430. puts "*** p IS OBSOLETE ***"
  431.  
  432. #global home
  433. #global tcl_platform tclload
  434. #    if {$tclload == 1} {
  435. #        source $home/bin/loadtk.tcl
  436. #    }
  437. #    source $home/bin/place_container.tcl
  438. #    plc
  439. #return
  440. }
  441.  
  442. # -------------------------------------------------------------------------
  443. #   DAS IST EINE DEBUG ROUTINE, DIE IN DER DISTRIBUTIONS VERSION VON NOMADS
  444. #   NICHT AUFGERUFEN WERDEN KANN, WEIL DAS GANZE TK ZEUX NICHT MITGELIEFERT 
  445. #   WIRD !
  446. # -------------------------------------------------------------------------
  447. proc chapterselector {} {
  448. global home
  449. global tcl_platform tclload
  450.     if {$tclload == 1} {
  451.         source $home/bin/loadtk.tcl
  452.     }
  453.     source $home/bin/selchapter.tcl
  454. return
  455. }
  456.  
  457. # -------------------------------------------------------------------------
  458. #   DAS IST EINE DEBUG ROUTINE, DIE IN DER DISTRIBUTIONS VERSION VON NOMADS
  459. #   NICHT AUFGERUFEN WERDEN KANN, WEIL DAS GANZE TK ZEUX NICHT MITGELIEFERT 
  460. #   WIRD !
  461. # -------------------------------------------------------------------------
  462. proc soundeditor {} {
  463. global home
  464. global tcl_platform tclload
  465.     if {$tclload == 1} {
  466.         source $home/bin/loadtk.tcl
  467.     }
  468.     source $home/bin/editsound.tcl
  469. return
  470. }
  471.  
  472.  
  473. # --------------------------------------------------------------------
  474. #   29-May-01   floh    aufgeraeumt, war irgendwie abhaengig vom
  475. #                       aktuell ausgewaehlten Objekt (was aber so 
  476. #                       oder so das "Maennel" sein muss!)
  477. #   24-May-02   peter   weg damit, haha
  478.  
  479. proc show_artefacts { } {
  480.     puts "*** show_artefacts is obsolete!"
  481. }
  482. #    return
  483. #
  484. #    set me [[/world.getuserclan].getmaennel]
  485. #
  486. #    if  { ([$me.ismenuopen] =="false") && ([$me.isshadow] == "false")  } {
  487. #
  488. #        # delete the old artefacts
  489. #        if  [exists /world/gui/ainfo]  { delete /world/gui/ainfo } 
  490. #
  491. #        sel /world/gui
  492. #        new n3dnode ainfo        
  493. #        ainfo.txyz 6 -13 -20
  494. #
  495. #        set maxa [$me.getmaxartefacts] 
  496. #        for { set i 1 } { $i <= $maxa } { incr i } {
  497. #             new n3dnode    /world/gui/ainfo/slot$i
  498. #             new nlinknode  /world/gui/ainfo/slot$i/link
  499. #             /world/gui/ainfo/slot$i/link.settarget /data/if_emptyslot/leer
  500. #             /world/gui/ainfo/slot$i.tx [expr $i * 2  - 20 ]                        
  501. #        }
  502. #
  503. #        set  i 0
  504. #        foreach klunker [$me.artefactlist] {
  505. #            incr i
  506. #             new n3dnode    /world/gui/ainfo/$i
  507. #             new nlinknode  /world/gui/ainfo/$i/link
  508. #             /world/gui/ainfo/$i/link.settarget [$klunker.getprototype]/visual/ifartefact
  509. #             /world/gui/ainfo/$i.tx [expr $i * 2  - 20 ]
  510. #        }
  511. #
  512. #        # Energiebalken macht jetzt der guimenuhandler
  513. #        ## Der EnergieBalken wird hier auch gleich mit gemacht
  514. #        ##if  ![exists /world/gui/ebar]  { /data/if_ebar/ebar.clone    /world/gui/ebar; puts "ENERGY BAR" }
  515. #
  516. #
  517. #        # Falls SpellSlot noch leer
  518. #        # und ein Spell aufgesammelt wurde, dann wird dieser in den Quickslot bef÷rdert
  519. #
  520. #        set     currentspell    [$me.getquickslot]
  521. #        if { $currentspell=="null" } {
  522. #            foreach klunker [$me.artefactlist] {
  523. #                if { [string match  "*spell*"  $klunker] } {
  524. #                    $me.setquickslot $klunker
  525. #                }                            
  526. #            }
  527. #        }
  528. #      
  529. #    }
  530. #}
  531.  
  532. proc delete_helpscreen { } {
  533.     puts "*** delete_helpscreen IS OBSOLETE ***"
  534. }
  535.  
  536. proc delete_possessicon { } {
  537.     if  [exists /world/gui/posses] { delete /world/gui/posses }    
  538. }
  539.  
  540. proc delete_artefacts { } {
  541. puts "*** delete_artefacts IS OBSOLETE ***"
  542. #    if  [exists /world/gui/ainfo] { delete /world/gui/ainfo }    
  543. }
  544.  
  545. proc delete_ebar { } {
  546. puts "*** delete_ebar IS OBSOLETE ***"
  547. #    if  [exists /world/gui/ebar ] { delete /world/gui/ebar  }    
  548. }
  549.  
  550. proc hide_artefacts { } {
  551. puts "*** hide_artefacts IS OBSOLETE ***"
  552.  
  553. #    set userClan [/world.getuserclan]
  554. #    if {$userClan != "null"} {
  555. #    
  556. #        set me [$userClan.getmaennel]
  557. #        if {$me != "null"} {
  558. #        
  559. #            if {([$me.isshadow] == "false")} {    
  560. #                delete_artefacts        
  561. #            }
  562. #        }
  563. #    }
  564. }
  565.  
  566. # --------------------------------------------------------------------
  567. # Ladescreen (LOADING) NUR F▄R DEN ANFANG VERWENDEN / WENN
  568. # Noch keine Database da is ! Mit remove_loadscreen wieder entfernen !
  569. # --------------------------------------------------------------------
  570. proc show_loadscreen {} {
  571.     puts "*** show_loadingscreen IS OBSOLETE!"
  572. }
  573.  
  574. proc remove_loadscreen {} {
  575.     puts "*** remove_loadingscreen IS OBSOLETE!"
  576. }
  577.  
  578. # --------------------------------------------------------------------
  579. # Zeigt fⁿr 3 Sekunden kurze Info an und entfernt diese dann wieder
  580. # --------------------------------------------------------------------
  581. proc show_info { info } {
  582.     puts "*** show_info $info: OBSOLETE!"
  583. }
  584.  
  585. proc hide_info {  } {
  586.     puts "*** hide_info $info: OBSOLETE!"
  587. }
  588.  
  589.  
  590. # --------------------------------------------------------------------
  591. #   Zeigt Basalt-Info-Text an
  592. #   die Zeit ist derzeit nicht mehr variabel
  593. #
  594. #   29-Nov-00   floh    neue Shader/Texture Objekt Struktur
  595. # --------------------------------------------------------------------
  596. proc show_infotext { info zeit } {
  597.     puts "*** show_infotext IS OBSOLETE ***"
  598. }
  599.  
  600.  
  601. # --------------------------------------------------------------------
  602. # Anzeige des aktuell angewΣhlten Objects
  603. # Das ist dieser alte FOCUS - sollte obsolete sein.
  604. # --------------------------------------------------------------------
  605. proc show_sel { selected friend } {
  606.     puts "*** show_sel IS OBSOLETE ***"
  607. }
  608.  
  609. proc rem_sel {} {
  610.     puts "*** rem_sel IS OBSOLETE ***"
  611. }
  612.  
  613. # --------------------------------------------------------------------
  614. # STD Lange Aktions Info, die von Hand weggenommen werden mu▀.
  615. # --------------------------------------------------------------------
  616. proc show_longaction { longaction } {
  617.     puts "*** show_longaction $longaction: OBSOLETE"
  618. }
  619.  
  620.  
  621. # -------------------------------------------------------------------
  622. # Blendet die Onscreen Hilfe ein/aus
  623. # -------------------------------------------------------------------
  624. proc hilfe {} {
  625.     puts "*** hilfe IS OBSOLETE ***"
  626. }
  627.  
  628. # -------------------------------------------------------------------
  629. proc screenshot {} {
  630. global screenshotcounter
  631.     global home
  632.     set curdir [pwd]
  633.     cd $home
  634.     incr screenshotcounter
  635.     set bildname                "pix[format %04d $screenshotcounter].bmp"
  636.     /sys/servers/gfx.screenshot $bildname
  637.     cd $curdir        
  638. return
  639. }
  640.  
  641.  
  642. # -------------------------------------------------------------------
  643. #
  644. #  OCTREE und CLIPPING VISUALISIERUNG AN / AUS (durchschalten)
  645. #
  646. #   07-Jul-99   floh    Visualisierung fuers aktuelle Vehikel
  647. #   26-Nov-99   bernd   Neue Visualisierungen
  648. #
  649. proc visualisations {} {
  650. global  vis
  651.     set vhcl [/world.getviewercarrier]
  652.     switch $vis {
  653.         0   {
  654.                 puts "*** OCTREE VISUALIZATION"
  655.                 set vis 1
  656.                 /game/handler/octree.setvisualize   true
  657.                 /game/handler/coll2.setvisualize    false
  658.                 $vhcl.setvisualizephysics           false
  659.                 $vhcl.setvisualizeway               false
  660.                 $vhcl.setvisualizecmdbuffer         false
  661.                 $vhcl.setvisualizecamera            false
  662.             }
  663.         1   {
  664.                 puts "*** PHYSICS VISUALIZATION"
  665.                 set vis 2
  666.                 /game/handler/octree.setvisualize   false
  667.                 /game/handler/coll2.setvisualize    false
  668.                 $vhcl.setvisualizephysics           true
  669.                 $vhcl.setvisualizeway               false
  670.                 $vhcl.setvisualizecmdbuffer         false
  671.                 $vhcl.setvisualizecamera            true
  672.             }
  673.         2   {
  674.                 puts "*** WAYPOINT VISUALIZATION"
  675.                 set vis 3
  676.                 /game/handler/octree.setvisualize   false
  677.                 /game/handler/coll2.setvisualize    false
  678.                 $vhcl.setvisualizephysics           false
  679.                 $vhcl.setvisualizeway               true
  680.                 $vhcl.setvisualizecmdbuffer         true
  681.                 $vhcl.setvisualizecamera            false
  682.             }
  683.         3   {
  684.                 puts "*** COLLISSION VISUALIZATION"
  685.                 set vis 4
  686.                 /game/handler/octree.setvisualize   false
  687.                 /game/handler/coll2.setvisualize    true
  688.                 $vhcl.setvisualizephysics           false
  689.                 $vhcl.setvisualizeway               false
  690.                 $vhcl.setvisualizecmdbuffer         false
  691.                 $vhcl.setvisualizecamera            false
  692.             }
  693.         default   {
  694.                 puts "*** NO VISUALIZATION"
  695.                 set vis 0
  696.                 /game/handler/octree.setvisualize   false
  697.                 /game/handler/coll2.setvisualize    false
  698.                 $vhcl.setvisualizephysics           false
  699.                 $vhcl.setvisualizeway               false
  700.                 $vhcl.setvisualizecmdbuffer         false
  701.                 $vhcl.setvisualizecamera            false
  702.             }
  703.     }
  704.     return
  705. }
  706.  
  707.  
  708. # -------------------------------------------------------------------
  709. #
  710. #   Schaltet zwischen verschiedenen TIMELOCKS um
  711. #
  712. #   12-Aug-99   floh    'unlockdeltat' ersetzt durch 'lockdeltat 0.0'
  713. # -------------------------------------------------------------------
  714. proc zeitlupe { } {
  715. global timebase
  716.     switch $timebase {
  717.         0       { /sys/servers/time.lockdeltat   0.005
  718.                   set timebase 1
  719.                 }
  720.         1       { /sys/servers/time.lockdeltat   0.125
  721.                   set timebase 2
  722.                 }
  723.         default { 
  724.                   /sys/servers/time.lockdeltat 0.0
  725.                   set timebase 0
  726.                 }
  727.     }
  728. return
  729. }
  730.  
  731.  
  732.  
  733. # -------------------------------------------------------------------
  734. #   Schaltet SCHNELL / LANGSAM
  735. #   created:    2002-Apr-09 BERND
  736. # -------------------------------------------------------------------
  737. set timebasezwei 0
  738. proc schnell { } {
  739. global timebasezwei
  740.     switch $timebasezwei     {
  741.         0       { 
  742.                   puts "schnell"        
  743.                   /sys/servers/time.lockdeltat 0.1
  744.                   set timebasezwei 1
  745.                 }
  746.         1       { 
  747.                   puts "normal"
  748.                   /sys/servers/time.lockdeltat 0.0
  749.                   set timebasezwei 0
  750.                 }
  751.     }
  752. return
  753. }
  754.  
  755.  
  756. # ---------------------------------------------------------------------------------
  757. #
  758. #   Killt das aktuelle Vehicle
  759. #
  760. #   upd.:   02-Dec-99   Bernd   Nicht mehr per releasevehicle sondern
  761. #                               per reduceenergy.
  762. #           25-May-01   floh    maennel rausgefiltert
  763. # ---------------------------------------------------------------------------------
  764. proc killme { } {
  765.     set me     [[/world.getuserclan].getmaennel]
  766.     set other  [/world.getviewercarrier]
  767.     if {$me != $other} {
  768.         $other.reduceenergy 10000000
  769.     }
  770. }
  771.  
  772. proc killme2 { } {
  773.     set me    [[/world.getuserclan].getmaennel]
  774.     set other [/world.getviewercarrier]
  775.     if {$me != $other} {
  776.         $other.reduceenergy 10000000
  777.     }
  778. }
  779.  
  780.  
  781. # -------------------------------------------------------------------
  782. proc watch_own {} {
  783. puts "*** watch_own IS OBSOLETE ***"
  784.  
  785.     # diese routine macht keinen Sinn mehr, weil ich keine
  786.     # anderen Objekte mehr angucken kann!
  787.     # return
  788. }
  789.  
  790.  
  791. # -------------------------------------------------------------------
  792. proc watch_own2 {} {
  793. puts "*** watch_own2 IS OBSOLETE ***"
  794.  
  795.     # diese routine macht keinen Sinn mehr, weil ich keine
  796.     # anderen Objekte mehr angucken kann!
  797.     #   return
  798. }
  799.  
  800. # -------------------------------------------------------------------
  801. #   Liefert den ClanNamen des ⁿbergebenen FULL NAME VEHICLES
  802. #   created:    26-Nov-99   Bernd
  803. # -------------------------------------------------------------------
  804. proc clanof { fullname } {
  805. puts "*** clanof IS OBSOLETE ***"
  806.  
  807. #    set liste       [ split $fullname "/"               ] 
  808. #    set laenge      [ llength $liste                    ] 
  809. #    set currentclan [ lindex $liste [ expr $laenge - 2 ]]
  810. #   return $currentclan
  811. }
  812.  
  813. # -------------------------------------------------------------------
  814. proc fx { effect yy } {
  815.     set cur [ psel ]
  816.     if  { [$cur.isshadow] == "false"} {    
  817.         newv fx_$effect
  818.         alignvehicle $cur 0 $yy 0 0 0 0
  819.     }
  820.     sel $cur
  821. return
  822. }
  823.  
  824. # -------------------------------------------------------------------
  825. # Setzt den Cursor um
  826. # -------------------------------------------------------------------
  827. proc watchhandling { vehicle } {
  828. puts "*** watchhandling IS OBSOLETE ***"
  829.  
  830. #    if { $vehicle!="null" } { 
  831. #
  832. #        puts "[clock format [clock seconds] -format "%H%M%S" ] handle $vehicle"
  833. #
  834. #        /world/viewer.setwatch $vehicle
  835. #
  836. #        if {[$vehicle.isvehicleclass "concret.technical.static.building"] =="true"} {
  837. #            /data/if_marker/marker.sxyz             5 5 5
  838. #            /data/if_marker/markerred.sxyz          5 5 5
  839. #        } else {
  840. #            set scale [$vehicle.getradius]    
  841. #            /data/if_marker/marker.sxyz             $scale $scale $scale
  842. #            /data/if_marker/markerred.sxyz          $scale $scale $scale
  843. #        }
  844. #
  845. #        if { [[/world.getuserclan].getname] == [clanof $vehicle] } {                
  846. #            /world/viewer.setmarkerproto         if_marker/marker
  847. #            show_sel        [$vehicle.getprototype] good    
  848. #        } else {
  849. #            /world/viewer.setmarkerproto         if_marker/markerred      
  850. #            show_sel        [$vehicle.getprototype] evil
  851. #        }
  852. #
  853. #    } else {
  854. #        puts "NULL"
  855. #    }
  856. }
  857.  
  858. # Das ist der klassische Alte Befehl, der nach den bekannten Regeln das erstbeste
  859. # Vehicle in der aktuellen Mitte des Bildschirms nimmt.
  860. proc watchvehicle {} {
  861.  
  862. puts "*** watchvehicle IS OBSOLETE ***"
  863.  
  864. #    puts "[clock format [clock seconds] -format "%H%M%S" ] watchvehicle****" 
  865. #    rem_sel
  866. #    set vehicle    [ /world/viewer.searchvehicle all false true false ]   
  867. #    watchhandling  $vehicle
  868. #    if { $vehicle!="null"} {
  869. #        global  current_input
  870. #        global  prev_input
  871. #        set     prev_input         $current_input
  872. #        sel     [[/world.getuserclan].getmaennel]
  873. #        watchfinetune_input
  874. #    }
  875. }
  876.  
  877. # Beendet die Objekt Feinauswahl und gibt die Steuerung an die Originalsteuerung zurⁿck
  878. proc watchok {} {
  879. puts "*** watchok IS OBSOLETE ***"
  880.  
  881. #    global prev_input
  882. #    $prev_input
  883. #    puts "[clock format [clock seconds] -format "%H%M%S" ] watchok****" 
  884. }
  885.  
  886. # Verfeinert die Asuwahl
  887. proc watchfine { direction } {  
  888. puts "*** watchfine IS OBSOLETE ***"
  889.  
  890. #    puts "[clock format [clock seconds] -format "%H%M%S" ] watchfine" 
  891. #    watchhandling [ /world/viewer.searchvehicle $direction false true false ]
  892. }
  893.  
  894. #-------------------- Schwarzer Vorhang -----------------------------------
  895. proc vorhang {} {    
  896. puts "*** vorhang IS OBSOLETE ***"
  897.  
  898. #    fadeweg
  899. #    set cursel [psel]
  900. #    sel /world/gui
  901. #    new n3dnode vorhang
  902. #        sel vorhang
  903. #
  904. #        new nmeshnode mesh
  905. #        mesh.setfilename "lib:standards/plane.nvx"
  906. #
  907. #        # einfach nur eine schwarze Flaeche
  908. #        new nshadernode shader
  909. #            sel shader
  910. #            .setminlod 0.000000
  911. #            .setrenderpri 801
  912. #            .setdiffuse  0.000000 0.000000 0.000000 1.000000
  913. #            .setemissive 0.000000 0.000000 0.000000 1.000000
  914. #            .setambient  0.000000 0.000000 0.000000 0.000000
  915. #            .setlightenable true
  916. #            .setalphaenable true
  917. #            .setalphablend srcalpha invsrcalpha
  918. #            .setzwriteenable true
  919. #            .setfogenable false
  920. #            .setzfunc "always"
  921. #            .setcullmode "none"
  922. #        sel ..            
  923. #
  924. #    sel $cursel
  925. }
  926.  
  927. #-------------------- FADE IN F▄R SPIELANFANG -----------------------------------
  928. proc fadein {} {
  929.  
  930. puts "*** fadein ist OBSOLETE ***"
  931.  
  932. #    fadeweg
  933. #    set cursel [psel]
  934. #    sel /world/gui
  935. #    new n3dnode fadein
  936. #        sel fadein
  937. #
  938. #        new nmeshnode mesh
  939. #        mesh.setfilename "lib:standards/plane.nvx"
  940. #
  941. #        new nshadernode shader
  942. #            sel shader
  943. #            .setminlod 0.000000
  944. #            .setrenderpri 800
  945. #            .setdiffuse  0.000000 0.000000 0.000000 1.000000
  946. #            .setemissive 0.000000 0.000000 0.000000 0.000000
  947. #            .setambient  0.000000 0.000000 0.000000 0.000000
  948. #            .setlightenable true
  949. #            .setalphaenable true
  950. #            .setalphablend "srcalpha" "invsrcalpha"
  951. #            .setzwriteenable true
  952. #            .setfogenable false
  953. #            .setzfunc "always"
  954. #            .setcullmode "none"
  955. #
  956. #            new nipol diff
  957. #                sel diff
  958. #                .connect setdiffuse
  959. #
  960. #                set starttime [/sys/servers/time.gettime]
  961. #                set endtime   [expr $starttime + 2]
  962. #                set endtime2  [expr $starttime + 4]
  963. #                .addkey4f     0          0 0 0 1
  964. #                .addkey4f     $starttime 0 0 0 1
  965. #                .addkey4f     $endtime   0 0 0 0
  966. #                .addkey4f     $endtime2  0 0 0 0
  967. #            sel ..
  968. #
  969. #        sel ..            
  970. #
  971. #    after 3500 { fadeweg }
  972. #    sel $cursel
  973. }
  974.  
  975. proc fadeweg {} {
  976.  
  977. puts "*** fadeweg IST OBSOLETE ***"
  978.  
  979. #    if { [exists /world/gui/fadein]   } { delete /world/gui/fadein   }
  980. #    if { [exists /world/gui/vorhang]  } { delete /world/gui/vorhang  }
  981. }
  982.  
  983.  
  984. # -------------------------------------------------------------------
  985. # Escape 
  986. #   + wenn ich was angucke, wird der Lock wieder weggenommen - ich 
  987. #     gucke mich wieder selber an
  988. #   + wenn ich nix angucke - dann wird das menu aufgemacht    
  989. #   18-May-01   floh    + ingame menus for single and multiplayer
  990. #   18-Jun-01   ich     + escape leaves vehicle
  991. # -------------------------------------------------------------------
  992. proc escape {} {
  993.  
  994.     set current     [ /world.getviewercarrier ]
  995.     set nextone     [ /world.getviewercarrier ]
  996.     
  997.     set userClan    [/world.getuserclan]
  998.     if {"null" == $userClan} {
  999.         return
  1000.     }
  1001.     set me          [ $userClan.getmaennel ]
  1002.     if {"null" == $me} {
  1003.         return
  1004.     }
  1005.  
  1006.     # altes Verzeichnis merken
  1007.     set oldCWD [.getfullname]
  1008.  
  1009.     sel $current
  1010.     
  1011.     # steuert das maennel ein anders Objekt?
  1012.     if {([$me.ispossessingvehicle] == "true") || ([$me.ispossessingbuilding] == "true")} {
  1013.  
  1014.         if {[$me.ispossessingvehicle] == "true"} {
  1015.         
  1016.             # vehicle: leave or watch own
  1017.             if {$nextone == $current} {
  1018.                 leavevehicle
  1019.             } else {
  1020.                 watch_own
  1021.             }        
  1022.         } else {
  1023.         
  1024.             # house: leavevehicle
  1025.             leavevehicle
  1026.         }
  1027.     } else {
  1028.     
  1029.         # not inside a vehicle. viewer locked?
  1030.         if {$nextone == $current} {
  1031.         
  1032.             # no, open menu
  1033.             if {[/world.isnetsession] == "true"} {
  1034.                 open_menu ingame_multiplayer
  1035.             } else {
  1036.                 open_menu ingame_singleplayer
  1037.             }
  1038.         } else {
  1039.         
  1040.             # watch own
  1041.             watch_own
  1042.         }
  1043.     }
  1044. }
  1045.         
  1046. # -------------------------------------------------------------------
  1047. #   John springt zu GebΣude
  1048. #   created:    2000-10-18
  1049. #               05-Dec-01   floh    setviewercarrier
  1050. # -------------------------------------------------------------------
  1051. proc jumptobuilding { nextone } {
  1052.  
  1053.     set userClan [/world.getuserclan]
  1054.     if {$userClan != "null"} {
  1055.         set me [$userClan.getmaennel]
  1056.         if {$me != "null"} {
  1057.             /world.setviewercarrier "null"
  1058.             $me.alignvehicle $nextone 0 10 8 0 0 0
  1059.             $me.setstate wirbel
  1060.             $me.setvisible true
  1061.             /world.setviewercarrier $me
  1062.             /world.sethandcontrol $me
  1063.             fx appear 1
  1064.             sel $me
  1065.             flying_input
  1066.         }
  1067.     }
  1068.     return
  1069. }
  1070.  
  1071. #---------------------------------------------------------------------------
  1072. # Standard Aktion
  1073. # neu
  1074. #
  1075. #   05-Dec-01   floh    auf world.setviewercarrier umgebaut
  1076. #---------------------------------------------------------------------------
  1077. proc action {} {
  1078.  
  1079.     set current     [/world.getviewercarrier]
  1080.     set nextone     [/world.getviewercarrier]
  1081.     
  1082.     set userClan    [/world.getuserclan]
  1083.     if {"null" == $userClan} {
  1084.         return
  1085.     }
  1086.     set me          [ $userClan.getmaennel ]
  1087.     if {"null" == $me} {
  1088.         return
  1089.     }
  1090.  
  1091.     # altes Verzeichnis merken
  1092.     set oldCWD [.getfullname]
  1093.  
  1094.     sel $current
  1095.     
  1096.     # steuert das maennel ein anders Objekt?
  1097.     if {([$me.ispossessingvehicle] == "true") || ([$me.ispossessingbuilding] == "true")} {
  1098.     
  1099.         # steuert maennel ein vehicle?
  1100.         if {[$me.ispossessingvehicle] == "true"} {
  1101.         
  1102.         } else {
  1103.         
  1104.         }
  1105.  
  1106.     } else {
  1107.     
  1108.         # Maennel ist frei. Steht es auf einer Possess-Platform?
  1109.         set curPossess [$me.getcurrentpossesshouse]
  1110.         if {$curPossess == "null"} {
  1111.         
  1112.             # bin frei. Sehe ich jemanden an?
  1113.             if {$current != $nextone} {
  1114.             
  1115.             } else {
  1116.             
  1117.                 # ich sehe mich selbst an. Aktion bedeutet Oeffnen des Menues,
  1118.                 # aber nur wenn ich im Zustand "stand" bin. In allen anderen
  1119.                 # Zustaenden mache ich nichts
  1120.                 if {[$me.getstate] == "stand"} {
  1121.                 
  1122.                     $me.setmenuopen true
  1123.                 }
  1124.             }
  1125.             
  1126.         } else {
  1127.         
  1128.             # kann "Hausbehandlung" starten, wenn im Zustand stehen
  1129.             if {[$me.getstate] == "stand"} {
  1130.  
  1131.                 # Hat das Haus ein vehicle, dessen Steuerung ich uebernehmen
  1132.                 # kann?
  1133.                 if {[$curPossess.isvehicleclass concret.technical.static.building.garage] == "true" } {   
  1134.  
  1135.                     # existiert das vehicle dazu
  1136.                     set vehicle [$curPossess.getproduct 0]
  1137.                     if {$vehicle != "null"} {
  1138.                     
  1139.                         # wir muessen es evtl. noch hervorlocken und
  1140.                         # uebernehmen die Steuerung
  1141.                         /world.unsethandcontrol
  1142.                         /world.setviewercarrier $vehicle
  1143.                         $me.setpossessingbuilding false
  1144.                         $me.setpossessingvehicle true
  1145.                         sel $me
  1146.                         vhclwatch_input
  1147.  
  1148.                         if {[$vehicle.isvisible] == "false"} {
  1149.  
  1150.                             sel $vehicle
  1151.                             setluretask
  1152.                         }
  1153.                     }
  1154.                 }
  1155.  
  1156.                 # Ein Flakgebaeude?
  1157.                 if {[$curPossess.isvehicleclass concret.technical.static.building.flakbuilding] == "true" } {
  1158.         
  1159.                     # Flaks haben ein Produkt, in welches wir uns setzen
  1160.                     set flak [$curPossess.getproduct 0]
  1161.                     if {$flak != "null"} {
  1162.  
  1163.                         /world.unsethandcontrol
  1164.                         /world.setviewercarrier $flak
  1165.                         $me.setpossessingvehicle false
  1166.                         $me.setpossessingbuilding true
  1167.                         sel $me
  1168.                         vhclwatch_input
  1169.                     }
  1170.                 }
  1171.             
  1172.                 # ist es ein "benutzbares" Gebaeude (derzeit nur island drives)?
  1173.                 if {[$curPossess.isvehicleclass concret.technical.static.building.islanddrive] == "true" } {
  1174.             
  1175.                     /world.unsethandcontrol
  1176.                     /world.setviewercarrier $curPossess
  1177.                     $me.setpossessingvehicle false
  1178.                     $me.setpossessingbuilding true
  1179.                     sel $me
  1180.                     vhclwatch_input
  1181.                 }
  1182.             }
  1183.         }
  1184.     }
  1185.     
  1186.     # Verzeichnis ruecksetzen
  1187.     sel $oldCWD
  1188. }
  1189.  
  1190.  
  1191. # -------------------------------------------------------------------
  1192. #   ZAUBERSPRUCH ABFEUERN
  1193. #   
  1194. #   created:    23-Jun-2000   Bernd
  1195. #   upd.:       28-Jun-2000   Bernd (Preis)
  1196. # -------------------------------------------------------------------
  1197. proc spell {} {
  1198.  
  1199.     set current         [ /world.getviewercarrier ]
  1200.     set nextone         [ /world.getviewercarrier ]
  1201.     set me              [ [/world.getuserclan].getmaennel ]
  1202.     set currentspell    [ $me.getquickslot ]
  1203.  
  1204.     if      { $currentspell!="null"} {   
  1205.         set energyreduction     [[[$currentspell.getprototype]/visual/price.gethead].getname]  
  1206.         set cure [ $me/../.getcurrentenergy ]
  1207.         if { $cure > $energyreduction } {            
  1208.             $me/../.setcurrentenergy [expr ($cure-$energyreduction)]
  1209.             $me.countupanddown  simplecount 0.1 1 0.3
  1210.             set spellobject         [ newv [[[$currentspell.getprototype]/visual/action.gethead].getname] ]
  1211.             if { $nextone=="null"  } { set nextone $me }    
  1212.             $spellobject.alignvehicle $nextone 0 0 0  0 0 0
  1213.             if { $nextone==$me} { $spellobject.alignvehicle $nextone 0 0 -40  0 0 0 }
  1214.             $spellobject.setdirection 0 0 0        
  1215.         } else {
  1216.             show_info noenergy
  1217.         }
  1218.     } else {
  1219.         puts "Quickslot empty"
  1220.     }
  1221.  
  1222. return
  1223. }
  1224.  
  1225. # Kuemmert sich nur um Channel
  1226. proc spellownercommand {} {
  1227.  
  1228.     set userClan [/world.getuserclan]
  1229.     if {"null" != $userClan} {
  1230.         set maennel [$userClan.getmaennel]
  1231.         if {"null" != $maennel} {
  1232.             
  1233.             # stehend oder laufend schiessen?
  1234.             if {"run" == [$maennel.getstate]} {
  1235.                 .countupanddown  simplecount 0.1 1 0.3
  1236.             } else {
  1237.                 .countupanddown  simplecount 0.2 0.2 0.3
  1238.             }
  1239.         }
  1240.     }
  1241. }
  1242.  
  1243. #-------------------------------------------------------------------------------
  1244. #   John springt aus dem aktuellen Vehicle, wenn er drinsitzt.
  1245. #   created:    26-Nov-99   Bernd
  1246. #   upd.:       02-Dec-99   Bernd   NUR WENN ER DRINSITZT
  1247. #               05-Dec-01   floh    auf world.setviewercarrier umgebaut
  1248. #-------------------------------------------------------------------------------
  1249. proc squadron_leavevehicle {} {
  1250.  
  1251.     # Da leavevehicle prophyloaktisch von jeder Explosion aufgerufen wird,
  1252.     # mu▀ ich erst gucken, ob ich auch drinnen sitze.
  1253.     # Ich verlasse mich drauf, da▀ das aktuelle Nebula Directory
  1254.     # dem Namen des aktuellen Fahrzeuges entspricht. Wenn nΣmlich nicht
  1255.     # breche ich das Kommando gleich wieder ab.
  1256.     if { [ /world.getviewercarrier ] != [psel] } { return }    
  1257.     
  1258.     if {[[psel].getstate] == "explode"} {
  1259.         /game/handler/feedback.registerairplanedestroyed
  1260.     }
  1261.  
  1262.     # war ich Geschwaderchef
  1263.     set new_one "null"
  1264.     if {[.isleader] == "true"} {
  1265.     
  1266.         if {"null" == [.getfirstlivingmember]} {
  1267.     
  1268.             # Wenn ich der letzte im Geschwader war, kehre ich
  1269.             # zum Maennel zurueck
  1270.             /world.unsethandcontrol   
  1271.  
  1272.             # Maennel war nicht mehr unsichtbar, muss also nur wieder 
  1273.             # die handkontrolle bekommen.
  1274.  
  1275.             set userClan [/world.getuserclan]
  1276.             if {"null" != $userClan} {
  1277.                 set me [$userClan.getmaennel]
  1278.                 if {"null" != $me} {
  1279.                     /world.setviewercarrier $me
  1280.                     handkontrolle
  1281.  
  1282.                 
  1283.                     $me.setpossessingvehicle false
  1284.                     $me.setpossessingbuilding false
  1285.                 }
  1286.             }
  1287.             return
  1288.         } else {
  1289.         
  1290.             # es gibt noch Untergebene. An den ersten haenge ich mich
  1291.             # ran.
  1292.             set new_one [.getfirstlivingmember]
  1293.         }
  1294.     } else {
  1295.     
  1296.         # es kann durchaus passieren, dass ich als member kaputt gehe
  1297.         # (z.B. weil keine Handsteuerung etc...), dann an Leader haengen
  1298.         set new_one [.getleader]
  1299.         
  1300.         # Der Geschwaderfuehrer kann auch in diesem Moment sterben.
  1301.         # Dann eben zurueck zum Maennel
  1302.         if {[$new_one.getstate] == "explode"} {
  1303.             puts "WNIMANIJE!!! leavevehicle_squadron: smert natschalnik!"
  1304.  
  1305.             /world.unsethandcontrol   
  1306.             set userClan [/world.getuserclan]
  1307.             if {"null" != $userClan} {
  1308.                 set me  [$userClan.getmaennel]
  1309.                 if {"null" != $me} {
  1310.                     /world.setviewercarrier $me
  1311.                     handkontrolle
  1312.                     $me.setpossessingvehicle false
  1313.                     $me.setpossessingbuilding false
  1314.                 }
  1315.             }
  1316.             return
  1317.         }
  1318.     }
  1319.  
  1320.     if {"null" != $new_one} {
  1321.     
  1322.         set userClan [/world.getuserclan]
  1323.         if {"null" != $userClan} {
  1324.             set maennel [$userClan.getmaennel]
  1325.             if {"null" != $maennel} {
  1326.                 #set old [psel]
  1327.                 #sel $maennel
  1328.  
  1329.                 /world.setviewercarrier $new_one
  1330.                 #input_possessingvehicle
  1331.                 /world.sethandcontrol $new_one
  1332.                 #sel $old
  1333.         
  1334.                 # es kann durchaus passieren, dass der neue in ner Garage ist...
  1335.                 if {[.isvisible] == "false"} {
  1336.  
  1337.                     # vehicle muss selektiert sein!!!
  1338.                     setluretask
  1339.                 }
  1340.             }
  1341.         }
  1342.     }
  1343.  
  1344. return
  1345. }
  1346.  
  1347. #-------------------------------------------------------------------------------
  1348. #   Standard-Leavevehicle
  1349. #
  1350. #   Leave Vehicle and return control to maennel.
  1351. #-------------------------------------------------------------------------------
  1352. proc leavevehicle {} {
  1353.  
  1354.     # Da leavevehicle prophyloaktisch von jeder Explosion aufgerufen wird,
  1355.     # mu▀ ich erst gucken, ob ich auch drinnen sitze.
  1356.     # Ich verlasse mich drauf, da▀ das aktuelle Nebula Directory
  1357.     # dem Namen des aktuellen Fahrzeuges entspricht. Wenn nΣmlich nicht
  1358.     # breche ich das Kommando gleich wieder ab.
  1359.     if {[/world.getviewercarrier] != [psel]} { 
  1360.         return 
  1361.     } 
  1362.        
  1363.     if {[[psel].iskilled] == "true"} {
  1364.         /game/handler/feedback.registerbuildingdestroyed
  1365.     }
  1366.     
  1367.     # Wenn ich der letzte im Geschwader war, kehre ich
  1368.     # zum Maennel zurueck
  1369.     /world.unsethandcontrol   
  1370.  
  1371.     # Maennel war nicht mehr unsichtbar, muss also nur wieder 
  1372.     # die handkontrolle bekommen.
  1373.     set userClan [/world.getuserclan]
  1374.     if {"null" != $userClan} {
  1375.         set me [$userClan.getmaennel]
  1376.         if {$me != "null"} {
  1377.             /world.setviewercarrier $me
  1378.             handkontrolle
  1379.  
  1380.             $me.setpossessingvehicle false
  1381.             $me.setpossessingbuilding false
  1382.         }
  1383.     }
  1384. }
  1385.  
  1386. #-------------------------------------------------------------------------------
  1387. #   Handkontrolle an Maennel geben. Wird von leavevehicle benoetigt.
  1388. #
  1389. #-------------------------------------------------------------------------------
  1390. proc handkontrolle {} {
  1391.     set current  [/world.getviewercarrier]
  1392.     if {$current == "null"} {
  1393.         puts "Warning: 'handkontrolle' failed!"
  1394.         return
  1395.     }
  1396.     /world.sethandcontrol $current
  1397.     return    
  1398. }
  1399.  
  1400. # -------------------------------------------------------------------
  1401. proc fast {} {
  1402.     puts "fast"
  1403.     /world.setdayperiod 30
  1404.     return
  1405. }
  1406.  
  1407. # -------------------------------------------------------------------
  1408. proc slow {} {
  1409.     puts "slow"
  1410.     /world.setdayperiod 5200
  1411.     return
  1412. }
  1413.  
  1414. # -------------------------------------------------------------------
  1415. proc speedswitch {} {
  1416. global uhr
  1417.     if { $uhr==0 } {
  1418.         fast
  1419.         set uhr 1
  1420.     } else {
  1421.         slow
  1422.         set uhr 0
  1423.     }
  1424.     return
  1425. }
  1426.  
  1427.  
  1428. # -------------------------------------------------------------------
  1429. proc steinhagel {} {
  1430. puts "*** steinhagel IST OBSOLETE ***"
  1431.  
  1432. #    # Einen Environment Clan raussuchen
  1433. #    set envclan "null"
  1434. #
  1435. #    sel /world/clans
  1436. #    set x [.gethead]
  1437. #    while {$x != "null"} {
  1438. #        sel $x
  1439. #        if  {[$x.isenvironment]=="true"} { 
  1440. #            if {[$x.isshadow]=="false"} {
  1441. #                set envclan $x 
  1442. #            }
  1443. #        } 
  1444. #        set x [.getsucc]
  1445. #    }
  1446. #
  1447. #    if { $envclan=="null" } { puts "Steinhagel: No envclan found."; return }
  1448. #
  1449. #    for { set i 1 } { $i < 3 } { incr i 1} {
  1450. #        for { set ii 1 } { $ii < 3 } { incr ii 1} {
  1451. #            set dingens           [ $envclan.createvehicle brocken ]
  1452. #            $dingens.setposition  [ expr -25 + rand() * 50 ] 70 [ expr -25 + rand() * 50 ]
  1453. #        }
  1454. #    }
  1455. #
  1456. #return
  1457. }
  1458.  
  1459. # -------------------------------------------------------------------
  1460. # 16-Jun-99 floh    angepasst an neues Script-Interface
  1461. # neue vehicle schaffen
  1462. # -------------------------------------------------------------------
  1463. proc newv { orig } {
  1464.  
  1465.     set userClan [/world.getuserclan]
  1466.     if {$userClan != "null"} {
  1467.         set me [$userClan.getmaennel]    
  1468.         if {$me != "null"} {
  1469.             set v [$userClan.createvehicle $orig]
  1470.             sel $v
  1471.             alignvehicle $me 0 10 -20 0 0 0
  1472.             
  1473.             return $v
  1474.         } else {
  1475.             puts "User has no character, `newv' aborted."
  1476.         }
  1477.     } else {
  1478.         puts "No user clan available, `newv' aborted."
  1479.     }
  1480.         
  1481.     return "null"
  1482. }
  1483.  
  1484. # -------------------------------------------------------------------
  1485. # 25-Jan-02 sven    angepasst an neues Script-Interface
  1486. # neue spells, ... legen
  1487. # -------------------------------------------------------------------
  1488. proc news { orig } {
  1489.  
  1490.     set userClan [/world.getuserclan]
  1491.     if {$userClan != "null"} {
  1492.         set me [$userClan.getmaennel]
  1493.         if {$me != "null"} {
  1494.             set v [$userClan.createvehicle $orig]
  1495.             sel $v
  1496.             alignvehicle $me 0 3 0 0 0 0
  1497.             
  1498.             return $v
  1499.         } else {
  1500.             puts "Player has no character, `news' aborted."
  1501.         }
  1502.     } else {
  1503.         puts "No user clan available, `news' aborted."
  1504.     }
  1505.         
  1506.     return "null"
  1507. }
  1508.  
  1509. # -------------------------------------------------------------------
  1510. proc new3 { orig } {
  1511.  
  1512.     set me [[/world.getuserclan].getmaennel]    
  1513.  
  1514.     set player [/world.getuserclan]        
  1515.     set v [$player.createvehicle $orig]
  1516.     sel $v
  1517.    
  1518.     if {$me != "null"} {
  1519.         alignvehicle $me 0 -1 0  0 0 0
  1520.     }
  1521.         
  1522. return $v 
  1523. }
  1524.  
  1525.  
  1526. # -------------------------------------------------------------------
  1527. proc newv2 { orig } {
  1528.     for {set cl [/world/clans.gethead]} {$cl != "null"} {set cl [$cl.getsucc]} {
  1529.         puts "clan = $cl"
  1530.         if {[$cl.isenvironment] == "true"} {
  1531.             puts "env clan = $cl"
  1532.             set v [$cl.createvehicle $orig]
  1533.             sel $v
  1534.             .setposition 0 20 0
  1535.             return $v
  1536.         }
  1537.     }
  1538. }
  1539.  
  1540. # -------------------------------------------------------------------
  1541. # 16-Jun-99 floh    umgeschrieben auf neues Scriptinterface
  1542. #                   erwartet jetzt normalen Pfadnamen
  1543. # -------------------------------------------------------------------
  1544. proc ss { name } {
  1545.     /world.setviewercarrier $name
  1546.     sel $name
  1547. return
  1548. }
  1549.  
  1550. # -------------------------------------------------------------------
  1551. proc s { name } {
  1552.     /world.sethandcontrol $name
  1553.     /world.setviewercarrier $name
  1554.     sel $name
  1555. return
  1556. }
  1557.  
  1558. # -------------------------------------------------------------------
  1559. # session()
  1560. # zeigt aktuelle laufende Sessions mit Nummer und Zusatzinfo an
  1561. # 16-Jun-99 floh    created
  1562. # -------------------------------------------------------------------
  1563. proc sessions {} {
  1564. puts "*** sessions IST OBSOLETE ***"
  1565.  
  1566. #    set nums [/sys/servers/network.asksessions false 0 0]
  1567. #    if {$nums == 0} {
  1568. #        puts "No sessions."
  1569. #    } else {
  1570. #        for {set i 1} {$i <= $nums} {incr i} {
  1571. #            set s_name    [/sys/share/sessions/$i/name.gets]
  1572. #            set s_address [/sys/share/sessions/$i/address.gets]
  1573. #            puts "<$i>: $s_name on $s_address"
  1574. #        }
  1575. #    }
  1576. }
  1577.  
  1578.  
  1579. #-----------------------------------------------------------------
  1580. proc toggle_netstat {} {
  1581. global netstat   
  1582.     switch $netstat {
  1583.         0   {
  1584.                 /sys/servers/console.unwatch
  1585.                 /sys/servers/console.watch   "net_*"
  1586.                 set netstat 1
  1587.             }
  1588.         1   {
  1589.                 /sys/servers/console.unwatch
  1590.                 /sys/servers/console.watch "send0_*"
  1591.                 set netstat 2
  1592.             }
  1593.         2   {
  1594.                 /sys/servers/console.unwatch
  1595.                 /sys/servers/console.watch "send1_*"
  1596.                 set netstat 3
  1597.             }
  1598.         3   {
  1599.                 /sys/servers/console.unwatch
  1600.                 /sys/servers/console.watch "receive0_*"
  1601.                 set netstat 4
  1602.             }
  1603.         4   {
  1604.                 /sys/servers/console.unwatch
  1605.                 /sys/servers/console.watch "receive1_*"
  1606.                 set netstat 5
  1607.             }
  1608.         5   {
  1609.                 /sys/servers/console.unwatch
  1610.                 set netstat 0
  1611.             }
  1612.     }
  1613.     return
  1614. }
  1615.  
  1616. # -------------------------------------------------------------------
  1617. #
  1618. #   25-Nov-99   bernd   Abfrage ob ich Netzsession bin
  1619. #
  1620. proc feinde {} {
  1621. global feindclan
  1622.  
  1623.     # fremdartigen clan erzeugen, wenn der noch nicht exisfitiert
  1624.     if {$feindclan=="null"} {
  1625.         if {[/world.isnetsession] == "false"} {  
  1626.             set feindclan [/world.createclan]
  1627.         } else {
  1628.             set feindclan [/world.createclan]
  1629.         }
  1630.     }
  1631.  
  1632.     # Falls man uns den Clan unter dem Arsch weggel÷scht hat
  1633.     # mⁿssen wir ihn auch wieder neu erzeugen
  1634.     if ![exists $feindclan] {
  1635.         if {[/world.isnetsession] == "false"} {  
  1636.             set feindclan [/world.createclan]
  1637.         } else {
  1638.             set feindclan [/world.createclan]
  1639.         }
  1640.     }
  1641.  
  1642.     $feindclan.setclancolor 1 0 0 
  1643.     $feindclan.setsymbolicname boese
  1644.  
  1645.     setfaction boese enemy1    
  1646.  
  1647.     set b1 [$feindclan.createvehicle p_shark]
  1648.     $b1.setposition        100 50  0
  1649.     set b1 [$feindclan.createvehicle p_shark]
  1650.     $b1.setposition        -120 20  0
  1651.     set b1 [$feindclan.createvehicle p_shark]
  1652.     $b1.setposition         0 20 150
  1653.     set b1 [$feindclan.createvehicle p_shark]
  1654.     $b1.setposition        0 3  -50
  1655.  
  1656. return    
  1657. }
  1658. # -------------------------------------------------------------------
  1659. #
  1660. #   18-july-02   heninng  skrits als feinde
  1661. #
  1662. proc viecher {} {
  1663. global feindclan
  1664.  
  1665.     # fremdartigen clan erzeugen, wenn der noch nicht exisfitiert
  1666.     if {$feindclan=="null"} {
  1667.         if {[/world.isnetsession] == "false"} {  
  1668.             set feindclan [/world.createclan]
  1669.         } else {
  1670.             set feindclan [/world.createclan]
  1671.         }
  1672.     }
  1673.  
  1674.     # Falls man uns den Clan unter dem Arsch weggel÷scht hat
  1675.     # mⁿssen wir ihn auch wieder neu erzeugen
  1676.     if ![exists $feindclan] {
  1677.         if {[/world.isnetsession] == "false"} {  
  1678.             set feindclan [/world.createclan]
  1679.         } else {
  1680.             set feindclan [/world.createclan]
  1681.         }
  1682.     }
  1683.  
  1684.     $feindclan.setclancolor 1 0 0 
  1685.     $feindclan.setsymbolicname boese
  1686.  
  1687.     setfaction boese enemy1    
  1688.  
  1689.     set b1 [$feindclan.createvehicle skrit04]
  1690.     $b1.setposition        100 50  0
  1691.     set b1 [$feindclan.createvehicle skrit04]
  1692.     $b1.setposition        -120 20  0
  1693.     set b1 [$feindclan.createvehicle skrit04]
  1694.     $b1.setposition         0 20 150
  1695.     set b1 [$feindclan.createvehicle skrit04]
  1696.     $b1.setposition        0 3  -50
  1697.  
  1698. return    
  1699. }
  1700.  
  1701. # -------------------------------------------------------------------
  1702. # Setzt das "Hervorlock-Ziel". Ist wie Approachpos, aber anderer
  1703. # Zieltyp.
  1704. # -------------------------------------------------------------------
  1705. proc setluretask {} {
  1706.  
  1707.     # Hervorlocken ist nun ein Task!
  1708.     .settask lure null
  1709. }
  1710.  
  1711. # ---------------------------------------------------------------
  1712. # Wird von einer Garage aufgerufen, die ihr Vehicle (so sie eines
  1713. # hat) sichtbar schaltet und auf die AppearPos setzt
  1714. #
  1715. #   13-Aug-01   floh    Meldungen rausgenommen
  1716. # ---------------------------------------------------------------
  1717. proc appearvehicle {} {
  1718.  
  1719. puts "--> appearvehicle"
  1720.  
  1721.     # Schatten haben weder product noch creator
  1722.     if { [.isshadow] == "true" } { return }
  1723.  
  1724.     set my_vehicle [.getproduct 0]
  1725.     if {$my_vehicle != "null"} {
  1726.  
  1727.         # Hier muesste auch noch die Ausrichtung folgen
  1728.         set apos [.getappearpos]
  1729.         set adir [.getappeardir]
  1730.         $my_vehicle.setvisible true
  1731.         $my_vehicle.setposition  [lindex $apos 0] [lindex $apos 1] [lindex $apos 2]
  1732.         $my_vehicle.setdirection [lindex $adir 0] [lindex $adir 1] [lindex $adir 2]
  1733.         
  1734.         # Ich muss das SetState sofert machen, weil der Sammler sonst erst
  1735.         # im naechsten Frame darauf reagiert und somit kurz unsichtbar ist!
  1736.         # Wenn er raus kommt, hat er ein Ziel. Deshalb goto. Wegschalten kann 
  1737.         # er immer noch
  1738.         $my_vehicle.announcestate goto
  1739.     } else {
  1740.         puts "Warning! appearvehicle has no product!!!"
  1741.     }
  1742.  
  1743. puts "<-- appearvehicle"
  1744. }
  1745.  
  1746. # --------------------------------------------------------------------
  1747. # Der Sinn dieser eigenartigen Routine ist es, dem vehicle zu sagen,
  1748. # dass die Einholanimation fertig ist und es nun nach Belieben weiter-
  1749. # schalten kann. Das ist deshalb notwendig, weil jedes vehicle anders
  1750. # entscheidet, was dann kommt (sleep, unload ...)
  1751. # --------------------------------------------------------------------
  1752. proc product_in_garage {} {
  1753.  
  1754. puts "-> product_in_garage"
  1755.  
  1756.     # Schatten haben weder product noch creator
  1757.     if { [.isshadow] == "true" } { return }
  1758.  
  1759.     set my_vehicle [.getproduct 0]
  1760.     if {$my_vehicle != "null"} {
  1761.         $my_vehicle.setinsidegarage true
  1762.     } else {
  1763.         puts "Warning! setproductstate has no product!!!"
  1764.     }
  1765. puts "<- product_in_garage"
  1766. }
  1767.     
  1768. # ------------------------------
  1769. # Setzt Objekt auf volle Energie
  1770. # ------------------------------
  1771. proc setfullenergy {} {
  1772.     .setenergy [.getmaxenergy]
  1773. }
  1774.  
  1775. proc start_inputvehicle {} {
  1776.  
  1777.     # Ich muss hier, um sicherzustellen, dass die garage nicht erst
  1778.     # im naechsten frame sich umschaltet, ein announcestate, sondern ein
  1779.     # setstate machen.
  1780.     set g [.getcreator]
  1781.     $g.setstate inputvehicle
  1782. }
  1783.  
  1784. proc start_outputvehicle {} {
  1785.     set g [.getcreator]
  1786. # puts "--> start_outputvehicle called for garage $g"
  1787.     $g.setoutputvehicle true
  1788. }
  1789.  
  1790. # -------------------------------------
  1791. # 120 Einheiten Energy beim 1. TC bauen
  1792. # -------------------------------------
  1793.  
  1794. proc startenergy {} {
  1795.  
  1796.     if { [.getcharges] == [ expr [.getmaxcharges] - 1 ] } {
  1797.         set clan    [ .getclan ]
  1798.         $clan.setcurrentenergy  [ expr [$clan.getcurrentenergy] + 120 ]
  1799.     }
  1800. }
  1801.  
  1802. #------------------------------------------------------------------------------------
  1803. proc show_end {} {
  1804.     puts "*** show_end: OBSOLETE!"
  1805.  
  1806. #    global nomads_home
  1807. #    set cur [psel]
  1808. #    if  { [$cur.isshadow] == "false"} {    
  1809. #        sel /
  1810. #        new nroot tmp
  1811. #        sel tmp 
  1812. #        get $nomads_home/data.n/if_menu.n
  1813. #        /tmp/if_menu/menu/info/gameover.clone  /world/gui/gameover
  1814. #        /world/gui/gameover.setactive true
  1815. #    }        
  1816. #    sel $cur   
  1817. return
  1818. }
  1819.  
  1820. proc remove_end {} {
  1821. puts "*** remove_end IST OBSOLETE ***"
  1822.  
  1823. #    if {[exists /tmp]} { delete /tmp }
  1824. #    if {[exists /world/gui/gameover]} { delete /world/gui/gameover }
  1825. #   return
  1826. }
  1827.  
  1828. proc final_menuauf {} {
  1829. puts "*** final_menuauf IST OBSOLETE ***"
  1830.  
  1831. #global curmenu    
  1832. #    remove_end
  1833. #    m_killgame
  1834. }
  1835.  
  1836. proc removethisfromviewer {} {
  1837.  
  1838.     if {[psel] == [/world.getviewercarrier]} {
  1839.         /world.setviewercarrier null
  1840.     }
  1841. }
  1842.  
  1843. #------------------------------------------------------------------------------------
  1844. # Mit dieser Aktion setze ich ein Ziel
  1845. #------------------------------------------------------------------------------------
  1846. proc action_settarget {me target} {
  1847.  
  1848.     # Ziel setzen. Vorerst bei mir, spaeter beim Geschwader dieses Ziel setzen.
  1849.     $me.setvehicletarget $target 300 true
  1850.     
  1851.     # handsteuerung ausschalten, damit man sofort die Aktion sieht
  1852.     if {[$me.ishandcontrol] == "true"} {
  1853.         /world.unsethandcontrol
  1854.         
  1855.         set john    [[/world.getuserclan].getmaennel]
  1856.         set old_cwd [psel]
  1857.         sel $john
  1858.         vhclwatch_input
  1859.         sel $old_cwd
  1860.     }
  1861. }
  1862.  
  1863. #------------------------------------------------------------------------------------
  1864. # Um zum Beispiel towncenter als Beampunkt zu finden. Macht derzeit
  1865. # auch Selektion als WatchObjekt.
  1866. #------------------------------------------------------------------------------------
  1867. proc searchtowncenter {} {
  1868. puts "*** searchtowncenter IST OBSOLETE ***"
  1869.  
  1870.     # OBSOLETE!!!    
  1871. }
  1872.  
  1873. #------------------------------------------------------------------------------------
  1874. proc formsquadron {} {
  1875.  
  1876.     # is called with carrier as controlled vehicle
  1877.     set v [/world.getviewercarrier]
  1878.     $v.formsquadron 0.0
  1879.     
  1880. puts "FORMSQUADRON"    
  1881.     
  1882. }
  1883.         
  1884. #-------------------------------------------------------------------------------
  1885. #   Connects the viewer to the house which is going to be build.
  1886. #   The house must be the currently selected object.
  1887. #   Also takes the hand control away from the character.
  1888. #
  1889. #   30-Oct-01   floh    proper header
  1890. #   05-Dec-01   floh    umgebaut auf world.setviewercarrier
  1891. #-------------------------------------------------------------------------------
  1892. proc connectviewertohouse {} {
  1893.  
  1894.     set house [.getfullname]
  1895.     set clan [$house.getclan]
  1896.     if {[$clan.isuser] == "true"} {
  1897.     
  1898.         /world.setviewercarrier $house
  1899.         /world.unsethandcontrol
  1900.  
  1901.         # john is watching action in a special state
  1902.         set maennel [$clan.getmaennel]
  1903.         $maennel.setcreatingbuilding true
  1904.     }
  1905. }
  1906.  
  1907. #-------------------------------------------------------------------------------
  1908. #   Disconnect the viewer from its carrier and connect it back to the maennel.
  1909. #   Also gives hand control back to the maennel.
  1910. #   The current viewer's carrier must be a house in its bauphase state!
  1911. #-------------------------------------------------------------------------------
  1912. proc removeviewerfromhouse {} {
  1913.  
  1914. puts "-> removeviewerfromhouse"
  1915.  
  1916.     set house [/world.getviewercarrier]
  1917.     if {($house != "null") &&\
  1918.         ([$house.isvehicleclass concret.technical.static.building] == "true") &&\
  1919.         ([$house.getstate] == "bauphase")}\
  1920.     {    
  1921.         set clan [$house.getclan]
  1922.         set maennel [$clan.getmaennel]
  1923.  
  1924.         # Beim Spielabbruch waehrend einer Bauanim kann das Maennel schon tot sein
  1925.         if {$maennel != "null"} {
  1926.         
  1927.             /world.setviewercarrier $maennel
  1928.             /world.sethandcontrol $maennel
  1929.         
  1930.             # allow john to switch back
  1931.             $maennel.setcreatingbuilding false
  1932.         }
  1933.     }
  1934. }
  1935.  
  1936. #------------------------------------------------------------------------------------
  1937. # Die einfache Variante. Es wird das naechste vehicle, welches ein
  1938. # Fighter oder eine Flak ist, ausgewaehlt.
  1939. #------------------------------------------------------------------------------------
  1940. proc cycle_airplanes {} {
  1941.  
  1942.     if {[/world.fastpossessactive] == "true"} {
  1943.         set old [psel]
  1944.     
  1945.         set current [/world.getviewercarrier]
  1946.         set maennel [[/world.getuserclan].getmaennel]
  1947.             
  1948.         set testclass1 "concret.technical.dynamic.vehicle.fighter"
  1949.         set testclass2 "concret.technical.static.flak"
  1950.     
  1951.         if {$maennel == $current} {
  1952.             set vehicle [search_next_vehicle null $testclass1 $testclass2]
  1953.         } else {
  1954.  
  1955.             set vehicle [search_next_vehicle $current $testclass1 $testclass2]
  1956.             if {$vehicle == "null"} {
  1957.             
  1958.                 # kann ja sein, dass wir ans Ende gekommen sind
  1959.                 set vehicle [search_next_vehicle null $testclass1 $testclass2]
  1960.             }
  1961.         }
  1962.             
  1963.         if {$vehicle != "null"} {
  1964.     
  1965.             # evtl. aufwecken ...
  1966.             if {[$vehicle.isvisible] == "false"} {
  1967.  
  1968.                 sel $vehicle
  1969.                 setluretask
  1970.             }
  1971.         
  1972.             # nun je nach Flak oder Fighter
  1973.             if {"true" == [$vehicle.isvehicleclass concret.technical.dynamic.vehicle.fighter]} {
  1974.                 # wenn das Flugzeug in der Garage ist, dann Kamera zur Garage
  1975.                 if {([$vehicle.isvisible] == "false") || \
  1976.                     ([$vehicle.getstate] == "leavegarage") || \
  1977.                     ([$vehicle.getstate] == "entergarage")} {
  1978.                     set garage [$vehicle.getcreator]
  1979.                     /world.setviewercarrier $garage
  1980.                     /world.unsethandcontrol
  1981.                     $vehicle.setviewergrab "true"
  1982.                 } else {
  1983.                     /world.setviewercarrier $vehicle
  1984.                     /world.sethandcontrol $vehicle
  1985.                 }
  1986.                 # input schalten braucht immer maennel!
  1987.                 #sel $maennel
  1988.                 #input_possessingvehicle
  1989.             
  1990.                 # erst aus- dann einschalten
  1991.                 $maennel.setpossessingbuilding false
  1992.                 $maennel.setpossessingvehicle true
  1993.                 
  1994.                 # maennel state switch should work automatically
  1995.             } else {
  1996.         
  1997.                 # ...und reinspringen
  1998.                 /world.setviewercarrier $vehicle
  1999.                 # dann muss es eine Flak sein
  2000.                 sel $maennel
  2001.                 #input_possessingbuilding
  2002.                 /world.sethandcontrol $vehicle
  2003.  
  2004.                 # erst aus- dann einschalten
  2005.                 $maennel.setpossessingvehicle false
  2006.                 $maennel.setpossessingbuilding true
  2007.             
  2008.                 # maennel state switch should work automatically
  2009.             }
  2010.         }
  2011.     
  2012.         sel $old
  2013.     } else {
  2014.         puts "Cycle vehicles not possible right now."
  2015.     }
  2016. }
  2017.  
  2018. #------------------------------------------------------------------------------------
  2019. # schaltet in ein vehicle oder in das naechste. Achtung, beachtet nun auch 
  2020. # flaks!
  2021. #------------------------------------------------------------------------------------
  2022. proc cycle_airplanes_ex {} {
  2023.  
  2024.     set old [psel]
  2025.     
  2026.     set current [/world.getviewercarrier]
  2027.     set maennel [[/world.getuserclan].getmaennel]
  2028.     if {$maennel == $current} {
  2029.         set vehicle [search_next_vehicle null "concret.technical.dynamic.vehicle.fighter" "nothing"]
  2030.     } else {
  2031.     
  2032.         set testclass "concret.technical.dynamic.vehicle.fighter"
  2033.         if {[$current.isvehicleclass "concret.technical.static.flak"] == "true"} {
  2034.             set testclass "concret.technical.static.flak"
  2035.         }
  2036.         set vehicle [search_next_vehicle $current $testclass "nothing"]
  2037.         if {$vehicle == "null"} {
  2038.         
  2039.             # kann ja sein, dass wir ans Ende gekommen sind
  2040.             set vehicle [search_next_vehicle null $testclass "nothing"]
  2041.         }
  2042.     }
  2043.             
  2044.     if {$vehicle != "null"} {
  2045.     
  2046.         # evtl. aufwecken ...
  2047.         if {[$vehicle.isvisible] == "false"} {
  2048.  
  2049.             sel $vehicle
  2050.             setluretask
  2051.         }
  2052.         
  2053.         
  2054.         
  2055.         # nun je nach Flak oder Fighter
  2056.         if {"true" == [$vehicle.isvehicleclass concret.technical.dynamic.vehicle.fighter]} {
  2057.             # wenn das Flugzeug in der Garage ist, dann Kamera zur Garage
  2058.             if {[$vehicle.isvisible] == "false"} {
  2059.                 set garage [$vehicle.getcreator]
  2060.                 /world.setviewercarrier $garage
  2061.                 $vehicle.setviewergrab "true"
  2062.             } else {
  2063.                 /world.setviewercarrier $vehicle
  2064.             }
  2065.             # input schalten braucht immer maennel!
  2066.             sel $maennel
  2067.             #input_possessingvehicle
  2068.             /world.sethandcontrol $vehicle
  2069.             
  2070.             # erst aus- dann einschalten
  2071.             $maennel.setpossessingbuilding false
  2072.             $maennel.setpossessingvehicle true
  2073.             
  2074.             # maennel state switch should work automatically
  2075.         } else {
  2076.             # ...und reinspringen
  2077.             /world.setviewercarrier $vehicle
  2078.             # dann muss es eine Flak sein
  2079.             sel $maennel
  2080.             #input_possessingbuilding
  2081.             /world.sethandcontrol $vehicle
  2082.  
  2083.             # erst aus- dann einschalten
  2084.             $maennel.setpossessingvehicle false
  2085.             $maennel.setpossessingbuilding true
  2086.             
  2087.             # maennel state switch should work automatically
  2088.         }
  2089.     }
  2090.     
  2091.     sel $old
  2092. }
  2093.  
  2094. #------------------------------------------------------------------------------------
  2095. # inner loop for searching of a vehicle class, currently two classes are
  2096. # supported
  2097. #------------------------------------------------------------------------------------
  2098. proc search_next_vehicle {anfang testclass1 testclass2} {
  2099.  
  2100.     if {$anfang == "null"} {
  2101.         set do_it true
  2102.     } else {
  2103.         set do_it false
  2104.     }
  2105.     
  2106.     # Wenn der Anfang eine Garage ist, dann suchen wir von deren produkt aus.
  2107.     if {("null" != $anfang) &&\
  2108.         ("true" == [$anfang.isvehicleclass "concret.technical.static.building.garage"])} {
  2109.         
  2110.         set anfang [$anfang.getproduct 0]
  2111.         if {"null" == $anfang} {
  2112.         
  2113.             return null
  2114.         }
  2115.     }
  2116.  
  2117.     for {set test [[/world.getuserclan].gethead]} \
  2118.         {$test != "null"} \
  2119.         {set test [$test.getsucc]} {
  2120.         
  2121.         # test erlaubt?
  2122.         if {$do_it == "true"} {
  2123.         
  2124.             # passend?
  2125.             if {("true" == [$test.isvehicleclass $testclass1]) || \
  2126.                 ("true" == [$test.isvehicleclass $testclass2])} {
  2127.  
  2128.                 # du nodd dschumb indu daed fehickel
  2129.                 if {([$test.iskilled] == "false") && ([$test.getstate] != "explode")} {
  2130.                 
  2131.                     # keine Vehicle schlafengelegter Garagen
  2132.                     if {"offline" != [$test.getstate]} {
  2133.                 
  2134.                         # was gefunden, gleich zurueckgeben
  2135.                         return $test
  2136.                     }
  2137.                 }
  2138.             }
  2139.         }
  2140.         
  2141.         if {$do_it == "false"} {
  2142.         
  2143.             # haben wir den startpunkt erreicht
  2144.             if {$anfang == $test} {
  2145.             
  2146.                 set do_it true
  2147.             }
  2148.         }
  2149.     }
  2150.     
  2151.     return null
  2152. }
  2153.  
  2154. # -------------------------------------------------------------------
  2155. # destroyflak: wird aufgerufen, wenn ein flakbuilding explodiert
  2156. # -------------------------------------------------------------------
  2157. proc destroyflak {} {
  2158.     set pos [.getproduct 0]
  2159.     if { [ /world.getviewercarrier ] == $pos } {
  2160.         /game/handler/feedback.registerbuildingdestroyed
  2161.     }
  2162.     .destroyproduct 0
  2163. }
  2164.     
  2165.  
  2166. # -------------------------------------------------------------------
  2167. # EOF
  2168. # -------------------------------------------------------------------
  2169.  
  2170.